#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//void bubble_sort(int arr[],int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz-1; i++)//对比的趟数
//	{
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)//对比的对数
//		{
//			if (arr[j] > arr[j + 1])//大于即升序，小于即降序
//			{
//				int tmp = 0;
//				tmp = arr[j];
//				arr[j]= arr[j + 1];
//				arr[j+1] = tmp;
//			}
//		}
//	}
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//}
//
//int main()
//{
//	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	bubble_sort(arr,sz);
//
//	return 0;
//}
////冒泡排序的实现(升序)
//int cmp_int(const void* p1,const void* p2)
//{
//	return (*(int*)p1) - (*(int*)p2);
//
//}
//int main()
//{
//	int i = 0;
//	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, sz, sizeof(arr[0]), cmp_int);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ",arr[i]);
//	
//	}
//
//	
//
//	return 0;
//}
//qsort
//void qsort(void* base, size_t num, size_t size,
//	int (*compar)(const void*, const void*));
//#include<stdlib.h>
//struct stu//结构体的定义
//{
//	char name[20];
//	int age;
//};
//
//int cmp_struct_age(const void* p1, const void* p2)
//{
//	return ((struct stu*)p1)->age - ((struct stu*)p2)->age;//结构体指针找到结构体变量并进行比较
//}
//
//int main()
//{
//	int i = 0;
//	struct stu arr[3] = { {"wang",20},{"li",12},{"zhong",28}};
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, sz, sizeof(arr[0]), cmp_struct_age);
//	struct stu* p = arr;
//
//	for (p = arr; p < &arr[3]; p++)//打印结构体数组
//	{
//		printf("%s,%d\n", (*p).name, (*p).age);
//	}
//
//	return 0;
//}
//#include <string.h>
//#include<stdlib.h>
//struct stu//结构体的定义
//{
//	char name[20];
//	int age;
//};
//
//int cmp_struct_age(const void* p1, const void* p2)
//{
//	return strcmp(((struct stu*)p1)->name , ((struct stu*)p2)->name);//结构体指针找到结构体变量并进行比较
//}
//
//int main()
//{
//	int i = 0;
//	struct stu arr[3] = { {"wang",20},{"li",12},{"zhong",28} };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, sz, sizeof(arr[0]), cmp_struct_age);
//	struct stu* p = arr;
//
//	for (p = arr; p < &arr[3]; p++)//打印结构体数组
//	{
//		printf("%s,%d\n", (*p).name, (*p).age);
//	}
//
//	return 0;
//}




//
//int cmp_int(const void* p1,const void* p2)
//{
//	return (*(int*)p1) - (*(int*)p2);
//
//}
//void swap(char* b1,char* b2,int size)
//{
//	int i = 0;
//	for (i = 0; i < size; i++)
//	{
//		char tmp = 0;
//		tmp = *b1;
//		*b1 = *b2;
//		*b2 = tmp;
//		b1++;
//		b2++;
//	}
//}
//void my_qsort(void* base, int sz, int size,int(*cmp_int)(const void* , const void* ))
//{
//	int i = 0;
//	for (i = 0; i < sz-1; i++)//对比的趟数
//	{
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)//对比的对数
//		{
//			if (cmp_int ((char*)base+j*size, (char*)base + (j+1) * size)>0)
//			{
//			
//				swap((char*)base + j * size, (char*)base + (j + 1) * size,size);
//			}
//		}
//	}
//}
//int main()
//{
//	int i = 0;
//	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	my_qsort(arr, sz, sizeof(arr[0]), cmp_int);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ",arr[i]);
//
//	}
//	return 0;
//}
//int cmp_int(const void* p1, const void* p2, int size, int j)
//{
//	return (*(char*)p1 + j * size) - (*(char*)p2 + ((j + 1) * size));
//
//
//}
//void swap(char* b1, char* b2, int size)
//{
//	int i = 0;
//	for (i = 0; i < size; i++)
//	{
//		char tmp = 0;
//		tmp = *b1;
//		*b1 = *b2;
//		*b2 = tmp;
//		b1++;
//		b2++;
//
//
//	}
//}
//void my_qsort(void* base, int sz, int size, int(*cmp_int)(const void*, const void*, int, int))
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)//对比的趟数
//	{
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)//对比的对数
//		{
//			if (cmp_int((char*)base + j * size, (char*)base + (j + 1) * size, size, j) > 0)
//			{
//
//				swap((char*)base + j * size, (char*)base + (j + 1) * size, size);
//			}
//		}
//	}
//}
//int main()
//{
//	int i = 0;
//	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	my_qsort(arr, sz, sizeof(arr[0]), cmp_int);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//
//	}
//	return 0;
//}
//int main()
//{
//
//	int a = 8;
//	int* p = &a;
//	int b = *(char*)p;
//	char c = *(char*)p;
//
//	return 0;
//}
//int main()
//{
//	int a[5] = { 5, 4, 3, 2, 1 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d,%d", *(a + 1), *(ptr - 1));
//	return 0;
//}
//int main()
//{
//	int aa[2][5] = { 10,9,8,7,6,5,4,3,2,1 };
//	int* ptr1 = (int*)(&aa + 1);
//	int* ptr2 = (int*)(*(aa + 1));
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//	return 0;
//}
